Перейти к основному содержимому

5.10. Ключевые слова в Go

Разработчику Архитектору

Ключевые слова в Go

Язык Go имеет 25 ключевых слов. Все они имеют строго определённое назначение и не могут использоваться в качестве имён переменных, функций или других идентификаторов.

Таблица ключевых слов

Ключевое словоЗначениеПример
breakПрерывает выполнение цикла или switchfor i := 0; i < 10; i++ { if i == 5 { break } }
caseОпределяет вариант в операторе switch или selectswitch x { case 1: fmt.Println("один") }
chanОбъявляет канал для передачи данных между горутинамиch := make(chan int)
constОбъявляет константуconst Pi = 3.14159
continueПропускает текущую итерацию циклаfor i := 0; i < 10; i++ { if i%2 == 0 { continue } }
defaultОпределяет вариант по умолчанию в switch или selectswitch x { default: fmt.Println("другое") }
deferОткладывает выполнение функции до завершения текущей функцииdefer file.Close()
elseОпределяет блок кода при ложном условии ifif x > 0 { } else { fmt.Println("ноль или меньше") }
fallthroughПереходит к следующему case в switchswitch x { case 1: fallthrough; case 2: fmt.Println("1 или 2") }
forОрганизует циклfor i := 0; i < 10; i++ { }
funcОбъявляет функциюfunc add(a, b int) int { return a + b }
goЗапускает функцию как горутинуgo process(data)
gotoПереходит к метке в кодеgoto end; end: fmt.Println("конец")
ifВыполняет блок кода при истинном условииif x > 0 { fmt.Println("положительное") }
importИмпортирует пакетimport "fmt"
interfaceОбъявляет интерфейсtype Speaker interface { Speak() string }
mapОбъявляет ассоциативный массивm := map[string]int{"one": 1}
packageОбъявляет пакетpackage main
rangeИтерирует по элементам массива, среза, карты или каналаfor i, v := range slice { }
returnВозвращает значение из функцииfunc get() int { return 42 }
selectВыбирает один из нескольких операций с каналамиselect { case msg := <-ch: fmt.Println(msg) }
structОбъявляет структуруtype Point struct { X, Y int }
switchВыбирает один из нескольких вариантов выполненияswitch x { case 1: fmt.Println("один") }
typeОбъявляет новый типtype Celsius float64
varОбъявляет переменнуюvar x int = 10

Предопределённые идентификаторы

Предопределённые идентификаторы не являются ключевыми словами, но имеют специальное значение в языке. Их можно переопределить в локальной области видимости, но делать это не рекомендуется.

ИдентификаторЗначениеПример
appendДобавляет элементы в срезslice = append(slice, 1, 2, 3)
boolЛогический тип данныхvar flag bool = true
byteПсевдоним для uint8var b byte = 'A'
capВозвращает ёмкость среза или каналаcapacity := cap(slice)
closeЗакрывает каналclose(ch)
complexСоздаёт комплексное числоc := complex(1.0, 2.0)
complex64Тип комплексного числа с 32-битной мантиссойvar c complex64
complex128Тип комплексного числа с 64-битной мантиссойvar c complex128
copyКопирует элементы из одного среза в другойcopy(dst, src)
deleteУдаляет элемент из картыdelete(map, key)
errorВстроенный интерфейс для ошибокfunc do() error { return nil }
falseЛогическое значение "ложь"var ok bool = false
float3232-битное число с плавающей точкойvar f float32 = 3.14
float6464-битное число с плавающей точкойvar f float64 = 3.14159
imagВозвращает мнимую часть комплексного числаim := imag(c)
intЦелочисленный тип (размер зависит от платформы)var x int = 42
int88-битное целое со знакомvar x int8 = -128
int1616-битное целое со знакомvar x int16 = 32767
int3232-битное целое со знакомvar x int32 = 1<<31 - 1
int6464-битное целое со знакомvar x int64 = 1<<63 - 1
iotaСчётчик в константных объявленияхconst ( A = iota; B; C ) // 0, 1, 2
lenВозвращает длину среза, карты, строки или каналаlength := len(slice)
makeСоздаёт срез, карту или каналslice := make([]int, 10)
newВыделяет память и возвращает указательptr := new(int)
nilНулевое значение для указателей, карт, срезов, каналов, интерфейсов, функцийvar m map[string]int = nil
panicВызывает панику (аварийное завершение)panic("что-то пошло не так")
printВыводит значение в стандартный выводprint("hello")
printlnВыводит значение с новой строкиprintln("hello")
realВозвращает действительную часть комплексного числаre := real(c)
recoverВосстанавливает выполнение после паникиdefer func() { if r := recover(); r != nil { } }()
runeПсевдоним для int32, представляет символ Юникодаvar r rune = 'я'
stringТип строкиvar s string = "hello"
trueЛогическое значение "истина"var ok bool = true
uintБеззнаковое целое (размер зависит от платформы)var x uint = 42
uint88-битное целое без знакаvar x uint8 = 255
uint1616-битное целое без знакаvar x uint16 = 65535
uint3232-битное целое без знакаvar x uint32 = 1<<32 - 1
uint6464-битное целое без знакаvar x uint64 = 1<<64 - 1
uintptrЦелочисленный тип для хранения адреса памятиvar p uintptr

Краткое описание категорий ключевых слов

Объявление и определение

  • var, const, type, func, package, import — создают сущности в программе

Поток управления

  • if, else, switch, case, default, fallthrough, for, range, break, continue, goto — управляют последовательностью выполнения

Составные типы

  • struct, interface, map, chan — определяют сложные типы данных

Параллелизм

  • go, select, chan — поддерживают конкурентное выполнение

Отложенное выполнение

  • defer — планирует выполнение на момент выхода из функции

Возврат значения

  • return — завершает функцию и возвращает результат